/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agenda.dao;

import agenda.bean.Cidade;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Antonio
 */
public class CidadeDAO {
    private Connection conn;

    public CidadeDAO() {
        conn = Conexao.getInstance();
    }

    // new id
    private Integer newId() throws SQLException {
        String sql = "select nextval('seq_cidade') as new";
        ResultSet rs = conn.createStatement().executeQuery(sql);
        if (!rs.next()) {
            rs.close();
            return null;
        }
        return rs.getInt("new");
    }
    
    // insert
    public boolean insert(Cidade c) {
        String sql = "insert into cidade (id, nome, uf) values (?, ?, ?)";
        try {
            c.setId(newId());
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setObject(1, c.getId());
            ps.setString(2, c.getNome());
            ps.setString(3, c.getUf());
            if (ps.executeUpdate() > 0) {
                return true;
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro: " + ex.getMessage());
        }
        return false;
    }

    // update
    public boolean update(Cidade c) {
        String sql = "update cidade set nome = ?, uf = ? where id = ?";
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, c.getNome());
            ps.setString(2, c.getUf());
            ps.setObject(3, c.getId());
            if (ps.executeUpdate() > 0) {
                return true;
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro: " + ex.getMessage());
        }
        return false;
    }

    // delete
    public boolean delete(Integer id) {
        String sql = "delete from cidade where id = ?";
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setObject(1, id);
            if (ps.executeUpdate() > 0) {
                return true;
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro: " + ex.getMessage());
        }
        return false;
    }

    // select
    public List<Cidade> select(String filtro) {
        if (filtro == null || filtro.trim().isEmpty()) {
            filtro = "1 = 1";
        }
        String sql = "select * from cidade where " + filtro;
        try {
            ResultSet rs = conn.createStatement().executeQuery(sql);
            List<Cidade> cidades = new ArrayList<Cidade>();
            while (rs.next()) {
                Cidade c = new Cidade();
                c.setId(rs.getInt("id"));
                c.setNome(rs.getString("nome"));
                c.setUf(rs.getString("uf"));
                cidades.add(c);
            }
            rs.close();
            return cidades;
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro: " + ex.getMessage());
        }
        return null;
    }

    public String getSqlPesquisa() {
        String sql = "select id as \"ID\",      "
                   + "       nome as \"Nome\",  "
                   + "       uf as \"UF\"       "
                   + "  from cidade             "
                   + " where upper(nome || '%' || uf) like upper(?)"
                   + " order by nome";
        return sql;
    }
    
}


















